<?php

class modelosxingresos extends Basemodelosxingresos
{
    public function  __toString() {
        return $this->getId();
    }
    public function getTotalFallas(){
        return $this->countfallasxingresoss();
    }
    public function getTotalTrabajos(){
        return $this->countinformesxingresoss();
    }
    
    public function getPrecios(){
                    //Marcelo Flores
                    // Funcion de Retorno costos de Reparación
                    //Modificar consulta para que incluya las cantidaddes
                    // $criteria = new Criteria;
                    //$criteria->addJoin(preciosxmodelosPeer::ID, informesxingresosPeer::PRECIOSXMODELOS_ID, Criteria::INNER_JOIN);
                    //$criteria->add(informesxingresosPeer::MODELOSXINGRESOS_ID);
                    //$totales = new preciosxmodelos();
                    //$totales = preciosxmodelosPeer::doSelect($criteria);
                    //$detalle_trabajo = new listadeprecios;
                    //Hasta Aca
                    //$cantidad = informesxingresosPeer::doSelect($criteria);
                    /*
                     *  foreach ($totales as $total){

                      $detalle_trabajo = $total->getlistadeprecios();
                      $trabajos = $trabajos.$detalle_trabajo->getDescripcionTrabajo().';';
                      $precio +=  $total->getPrecio();
                      if ($total->getIva()==0){
                        $exentas += $total->getPrecio();
                      }
                      else{
                       $impuesto += ($total->getIva()* $total->getPrecio())/100;
                      }

                    }
                     */
                    $precio = 0;$exentas=0;$impuesto=0;$subtotal=0;$trabajos="";
                    $c = Propel::GetConnection();
                    $consulta = 'Select informesxingresos.precio, informesxingresos.iva  , listadeprecios.descripcion_trabajo ,
                                 informesxingresos.cantidad from   listadeprecios  inner join ( preciosxmodelos  inner join informesxingresos on preciosxmodelos.id = informesxingresos.preciosxmodelos_id )
                                 on listadeprecios.id = preciosxmodelos.listadeprecios_id
                                 where informesxingresos.modelosxingresos_id  = '.$this->getId();
                    $sentencia = $c->prepare($consulta);
                    $sentencia->execute();
                    while($fila = $sentencia->fetch()){
                        if($fila['iva']){
                            $precio += $fila['precio']*$fila['cantidad'];
                        }
                        else{
                            $exentas += $fila['precio']*$fila['cantidad'];
                        }
                        $trabajos = $trabajos.$fila['descripcion_trabajo'].';';
                        $impuesto += ($fila['precio']*$fila['cantidad']*$fila['iva'])/100;
                    }
                    
                    
                    
                    return array('precio' => $precio,'exentas' => $exentas,'impuesto' => $impuesto,'subtotal'=> $subtotal,'trabajos' => $trabajos);
    }
    public function getPropietario(){

        $criteria = new Criteria;
        $criteria->addJoin(clientesPeer::ID, ordenesservicioPeer::CLIENTES_ID);
        $criteria->add(ordenesservicioPeer::ID, $this->getOrdenesservicioId());
        $cliente = clientesPeer::doSelectOne($criteria);
        //$ordenservicio = ordenesservicioPeer::retrieveByPK($this->getOrdenesservicioId());
        return $cliente->getNombre().', '.$cliente->getApellido();
    }
    public function getFechaDeIngreso(){

        //$ordenservicio = new ordenesservicio();
        $ordenservicio = ordenesservicioPeer::retrieveByPK($this->getOrdenesservicioId());
        return $ordenservicio->getFechaingreso('d/m/y');
    }
    public function save(PropelPDO $con = null){
        //Seteo a Reparado el equipo si no esta reparado aun, si ya esta reparado no hace nada
        //Seteo quien reparo tambien
        if ($this->getReparado()){
             $this->setSfGuardUser(sfContext::getInstance()->getUser()->getGuardUser()->getId());
             //Busco el parametro de Garantias que esta Activo
             $criteria = new criteria();
             $criteria->add(params_garantiaPeer::ACTIVO,true);
             if($peri_garan = params_garantiaPeer::DoselectOne($criteria))
                 $this->setPeriodoGarantia($peri_garan->getDias());
             else
                 $this->setPeriodoGarantia(30);
             //y Lo seteo a el equipo
             //Si era una garantia relleno los datos de la finalizacion de la Garantía
             if($this->getGarantia()){
                 $criteria->clearSelectColumns();
                 $criteria->add(garantiaPeer::MODELOSXINGRESOS_ID, $this->getid());
                 $garantia = garantiaPeer::DoSelectOne($criteria);
                 $garantia->setVolvioAReparar($this->getSfGuardUser());
                 $garantia->setFechaGarantia($this->getFechareparacion());
                 $garantia->save();
                 //Guardo la garantia
             }
        }
        //Si es nuevo y si es garantia cargo los datos en la tabla garantia
        if($this->isNew())
            if($this->getGarantia()){
                     $filas  = parent::save($con);
                     $garantia = new garantia();
                     $garantia->setModelosxingresosId($this->getId());
                     $garantia->setImei($this->getImei());
                     $ultima_rep = $this->UltimaReparacion();
                     if($ultima_rep){
                         $garantia->setReparacion1($ultima_rep->getSfGuardUser());
                        $garantia->setFechaReparacion1($ultima_rep->getFechareparacion());
                     }
                     $garantia->setFechaIngreso(time());
                     $garantia->setRegistradoPor(sfContext::getInstance()->getUser()->getGuardUser()->getId());
                     $garantia->save();
                     return $filas;
            }
            else
               //Si no es nuevo guardo los datos en la tabla modelosxingresos
               return parent::save($con);
         else
             //si no es nuevo guardo los datos
             return parent::save($con);

        
    }
    public function UltimaReparacion(){
        $criteria = new Criteria();
        $criteria->add(modelosxingresosPeer::IMEI, ' modelosxingresos.IMEI= '.$this->getImei().' having MAX(modelosxingresos.FECHAREPARACION) ', Criteria::CUSTOM);
        return  modelosxingresosPeer::doSelectOne($criteria);
    }
    public function delete(PropelPDO $con = null){
         $criteria = new criteria();
         $criteria->add(garantiaPeer::MODELOSXINGRESOS_ID, $this->getid());
         $garantia = garantiaPeer::DoSelectOne($criteria);
         try {
             if ($garantia)
                 $garantia->delete();
             return parent::delete($con);
         }
         catch(PropelException $e){
             throw $e;
         }
    }
}
